import { BasicColumn } from '@/components/Table';
import dayjs from 'dayjs';

/**
 * 根据预约数据获取当前状态
 * @param record 预约记录
 * @param now 当前时间（便于单元测试）
 */
export function getStatus(record: any, now = dayjs()) {
  // 状态优先级：已取消 > 已离座 > 已入座 > 已迟到 > 进行中 > 未开始 > 已过期
  if (+record.Cancel) return '已取消'; // 状态4

  // 解析日期和时间段
  const [startHour, endHour] = record.Time.split('-');
  const dateStr = dayjs(record.Date).format('YYYY-MM-DD');

  // 构造完整时间对象（考虑跨天情况）
  const startTime = dayjs(`${dateStr} ${startHour}`);
  let endTime = dayjs(`${dateStr} ${endHour}`);

  // 处理跨天时间段（如20:00-06:00）
  if (endTime.isBefore(startTime)) {
    endTime = endTime.add(1, 'day');
  }

  // 状态判断逻辑
  if (record.LeaveSeatTime) return '已离座'; // 状态5
  if (record.BeSeatedTime) return '已入座'; // 状态2

  // 当前时间在预约时间段之后（含迟到判断）
  if (now.isAfter(startTime)) {
    // 迟到判断：超过预约开始时间15分钟且未入座
    if (now.isAfter(startTime.add(15, 'minute')) && !record.BeSeatedTime) {
      return '已迟到'; // 状态3
    }

    // 在预约时间段内
    if (now.isBefore(endTime)) return '预约中'; // 状态1
  }

  // 预约未开始（当前时间早于预约开始时间）
  if (now.isBefore(startTime)) return '未开始';

  // 默认返回已过期（当前时间晚于预约结束时间且未操作）
  return '已过期';
}

export const getTableColumns = (): BasicColumn[] => [
  {
    title: '姓名',
    dataIndex: 'UserName',
    width: 120,
  },
  {
    title: '预约自习室',
    dataIndex: 'RoomName',
    width: 150,
  },
  {
    title: '使用日期',
    dataIndex: 'Date',
    width: 150,
    customRender: ({ text }) => dayjs(text).format('YYYY-MM-DD'),
  },
  {
    title: '使用时间段',
    dataIndex: 'Time',
    width: 150,
    customRender: ({ text, record }) => {
      const dateStr = dayjs(record.Date).format('YYYY-MM-DD');
      const [start, end] = text.split('-');
      return `${dateStr} ${start} ~ ${end.includes('+1') ? '次日' : ''}${end.replace('+1', '')}`;
    },
  },
  {
    title: '入座时间',
    dataIndex: 'BeSeatedTime',
    width: 180,
    customRender: ({ text }) => (text ? dayjs(text).format('YYYY-MM-DD HH:mm') : '-'),
  },
  {
    title: '离座时间',
    dataIndex: 'LeaveSeatTime',
    width: 180,
    customRender: ({ text }) => (text ? dayjs(text).format('YYYY-MM-DD HH:mm') : '-'),
  },
  {
    title: '预约时间',
    dataIndex: 'CreateTime',
    width: 180,
    customRender: ({ text }) => dayjs(text).format('YYYY-MM-DD HH:mm'),
  },
  {
    title: '状态',
    dataIndex: 'Status',
    width: 120,
    customRender: ({ record }) => getStatus(record),
  },
];
